{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "b4ff1bd2-73bd-4798-8476-54526d0f2c34",
   "metadata": {},
   "source": [
    "# Python科学数据处理"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5e65e7c1-dab0-4781-8578-f77bfa9afb29",
   "metadata": {},
   "source": [
    "## 数据量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "c9443259-760e-4132-8d65-edc6289726fa",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0f2c4aea-55f2-4c4d-847d-7def4900b901",
   "metadata": {},
   "source": [
    "## Numpy\n",
    "\n",
    "- 速度快"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5f9c17bf-5f28-4400-b612-463f961309c8",
   "metadata": {},
   "source": [
    "### 怎样创建Numpy"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "56e9aea2-8dfe-43d6-b289-cad1a2508fd2",
   "metadata": {},
   "source": [
    "#### 方法一"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e1445109-75b5-464b-af26-c8e4559d31db",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "numpy.ndarray"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "a=[[1,2,3],[4,5,6]]\n",
    "b=np.array(a)\n",
    "type(b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "14f02a33-f8ac-458f-9e61-9c8a7810d05b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2, 3)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "108c643b-d327-40f8-8a44-04ef2329d32c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6]])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "25c5ff26-5f84-4423-aa03-9c00031612bf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b[1,2]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "db982bd3-c4e1-42a4-96cf-80db1aa866e6",
   "metadata": {},
   "source": [
    "#### 方法二"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "878ef08d-3fde-4953-a0f3-3dd7ea1ba7f7",
   "metadata": {},
   "outputs": [],
   "source": [
    "c=np.arange(60)\n",
    "c=c.reshape(4,3,5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "a6c88b72-91bb-4adf-a267-46802bb04de9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "38"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c[2,1,3]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "4214a8fe-93fc-4484-89b7-0cce79ec1446",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,\n",
       "       27, 28, 29, 30, 31, 32, 33, 34])"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c=np.arange(60)\n",
    "d[10:35]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "a1070899-a379-4e4f-8cbb-7f2665b15de0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[25, 26],\n",
       "       [29, 30],\n",
       "       [33, 34],\n",
       "       [37, 38]])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "e=d.reshape(16,4)\n",
    "e[6:10,1:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "48d2bd02-7059-4cf2-8323-02c9ef77a0a4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 5,  6],\n",
       "       [13, 14],\n",
       "       [21, 22],\n",
       "       [29, 30]])"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f=np.arange(256)\n",
    "f=f.reshape(4,16,4)\n",
    "f\n",
    "f[0,1:8:2,1:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "fe94832c-b184-4e36-8c03-3d1626dc119a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[  5,   6],\n",
       "        [  9,  10],\n",
       "        [ 13,  14],\n",
       "        [ 17,  18],\n",
       "        [ 21,  22],\n",
       "        [ 25,  26],\n",
       "        [ 29,  30],\n",
       "        [ 33,  34],\n",
       "        [ 37,  38],\n",
       "        [ 41,  42],\n",
       "        [ 45,  46],\n",
       "        [ 49,  50],\n",
       "        [ 53,  54],\n",
       "        [ 57,  58]],\n",
       "\n",
       "       [[ 69,  70],\n",
       "        [ 73,  74],\n",
       "        [ 77,  78],\n",
       "        [ 81,  82],\n",
       "        [ 85,  86],\n",
       "        [ 89,  90],\n",
       "        [ 93,  94],\n",
       "        [ 97,  98],\n",
       "        [101, 102],\n",
       "        [105, 106],\n",
       "        [109, 110],\n",
       "        [113, 114],\n",
       "        [117, 118],\n",
       "        [121, 122]],\n",
       "\n",
       "       [[133, 134],\n",
       "        [137, 138],\n",
       "        [141, 142],\n",
       "        [145, 146],\n",
       "        [149, 150],\n",
       "        [153, 154],\n",
       "        [157, 158],\n",
       "        [161, 162],\n",
       "        [165, 166],\n",
       "        [169, 170],\n",
       "        [173, 174],\n",
       "        [177, 178],\n",
       "        [181, 182],\n",
       "        [185, 186]],\n",
       "\n",
       "       [[197, 198],\n",
       "        [201, 202],\n",
       "        [205, 206],\n",
       "        [209, 210],\n",
       "        [213, 214],\n",
       "        [217, 218],\n",
       "        [221, 222],\n",
       "        [225, 226],\n",
       "        [229, 230],\n",
       "        [233, 234],\n",
       "        [237, 238],\n",
       "        [241, 242],\n",
       "        [245, 246],\n",
       "        [249, 250]]])"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f[0:4,1:15,1:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "id": "e0d66f97-5622-488d-b544-fd4d577458b7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "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1RtL1OhfvKdusfy/4D19GytRRRVnOFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFTW0SyzfvCREo3SEdlHXHueg9yKTdlcqEHOSiuo9/9Hs1j6STYd/UL/CPx64/3TVapJpWnmaVgAWPQdAOwHsOgqOlFWWpdaalK0dlovT/AIO/z8goooqjIKs6l/yFLv8A67P/AOhGq1WdS/5Cl3/12f8A9CNR9r5fqdC/gP8AxL8mVqKKKs5wqxaMpZoJGAjmG3JPCt/C3tz1PoTVeik1dWLpz5JKX9ea+YrKyMVZSrKcEEYINJVm5/fRJdD7x+SX/eHf8Rzk9SGqtSi7odWHJKy26enT+u6YUUUVRmFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVZf/R7NY+kk2Hf1C/wj8euP901BH5fmp5u7y9w3beuO+PenTStPM0rAAseg6AdgPYdBUtXZtCShBvq9Pl1f6feR0UUVRiFFFFABVnUv+Qpd/wDXZ/8A0I1Wqa7lWe8nmUELJIzAHrgnNTb3rmykvYuPW6/JkNFFFUYhRRRQBYtGUs0EjARzDbknhW/hb256n0JqBlZGKspVlOCCMEGkqa4lWdkkwfMKjzCe7DjP4jBPuTU2tI25lKlZ7rb0fT5PX0bIaKKKoxCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//Z",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAIAAAAP3aGbAAASC0lEQVR4Ae3a25LjuBEFwLH//5/X5UWEQiORFC+4FMj0Uw8FAoUsNHR6w3/++B8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJhI4J+JalUqAQIE3FnOAAECMwm4s2bqlloJEHBnOQMECMwk4M6aqVtqJUDAneUMECAwk4A7a6ZuqZUAAXeWM0CAwEwC7qyZuqVWAgTcWc4AAQIzCbizZuqWWgkQcGc5AwQIzCTgzpqpW2olQMCd5QwQIDCTgDtrpm6plQABd5YzQIDATALurJm6pVYCBNxZzgABAjMJuLNm6pZaCRBwZzkDBAjMJODOmqlbaiVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBtAL/5KssYUmBlLOqfN3LW9F/85amMgIECBC4pUC27JCtnmh6wpJueRSbbkrCasprcgIECBBYEkiVIFIVE1rZ6llqoGe/BSSs30ZGECBAgEB9gTw5Ik8loZyqmPpdf9KMEtaTum2vBAgQSCWQJE0kKSNak6eSVOdk0mIkrEkbp2wCBAjcQiBDpshQQzQzSRm3OFYpNiFhpWiDIggQIPBcgeHJYngB0fsMNTz3CLbZuYTVxtWsBAgQILBfYGy+GLt6KA0vYH+njNwvIGHttzKSAAECBJoJDEwZA5cOzrGrN+unif9IWA4B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",
      "text/plain": [
       "<PIL.Image.Image image mode=RGB size=400x400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from PIL import Image\n",
    "\n",
    "# im = np.random.randint(0,255, (100,300,3), dtype=np.uint8)\n",
    "# NumPy 的 np.random.randint 函数来生成一个形状为 (100, 300, 3) 的三维数组，其中包含了随机的整数。\n",
    "#这些整数的范围是从 0 到 255（包括0但不包括255），并且数据类型被指定为 np.uint8，即无符号的8位整数。\n",
    "\n",
    "def dot(x, y, color=(255,0,0) ):\n",
    "    im[x, y] = color\n",
    "\n",
    "def line(x1, y1, x2, y2, color):\n",
    "    if x1<x2:\n",
    "         for x in range(x1, x2+1):\n",
    "             y = int((x-x1)/(x2-x1)*(y2-y1)+0.5) + y1\n",
    "             dot(x,y,color)\n",
    "    else:\n",
    "        for x in range(x2, x1+1):\n",
    "             y = int((x-x1)/(x2-x1)*(y2-y1)+0.5) + y1\n",
    "             dot(x,y,color)\n",
    "    \n",
    "im = np.zeros( (400,400,3), dtype=np.uint8) \n",
    "#这个数组的形状(400, 400, 3)表示它是一个图像数组，其中400x400是图像的尺寸，而3代表图像的三个颜色通道（红色、绿色和蓝色），即这是一个RGB图像\n",
    "\n",
    "line(10,10,30,30,(255,0,0))\n",
    "\n",
    "line(200,200,150,300,(255,0,0))\n",
    "line(200,200,100,250,(255,0,0))            \n",
    "line(200,200,100,150,(255,0,0))\n",
    "line(200,200,150,100,(255,0,0))\n",
    "line(200,200,250,100,(255,0,0))\n",
    "line(200,200,300,150,(255,0,0))\n",
    "line(200,200,300,250,(255,0,0))\n",
    "line(200,200,250,300,(255,0,0))\n",
    "line(100,200,300,200,(255,0,0))\n",
    "line(100,200,300,200,(255,0,0))\n",
    "\n",
    "\n",
    "im = Image.fromarray(im)\n",
    "\n",
    "display(im)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e1136c9f-2529-468a-8465-1f09ab9efe57",
   "metadata": {},
   "source": [
    "## 作业一"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "id": "357e2adc-cd41-4743-9d7e-9e1a58e0198c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQgJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGQAZADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5/ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigB0ao0qK77ELAM2M7R6470SRvDK8TjDoxVh6EU2rM37+1juP4kxFJ+Xyn8gR/wHPepbszaEVKDtutfl1+7f7ytRRRVGIUUUUAFS3MP2e6mh3bvLcpnGM4OKiqzqX/ACFLv/rs/wD6Eam/vWNlFexcut0vwZWoooqjEKKKKACpZofJ8sFssyB2GPu55H14wfxp1pGjyl5BmKJd7j1A6D8SQM9s5qKSR5pXlc5d2LMfUmpveVjblUafM93t6Ld/p942iiiqMQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACp7SRElKSHEUq7HPoD0P4EA474xUFFJq6sXTm4SUl0HSRvDK8TjDoxVh6EU2rM37+1juP4kxFJ+Xyn8gR/wHPeq1KLutSqsFCXu7PVej/qz80FFFFUZBVnUv+Qpd/wDXZ/8A0I1WqzqX/IUu/wDrs/8A6Eaj7Xy/U6F/Af8AiX5MrUUUVZzhRRU9pGjyl5BmKJd7j1A6D8SQM9s5pN2Vy6cHOSiuo6b9xax2/wDE+JZPy+UfkSf+BY7VWp0kjzSvK5y7sWY+pNNpRVlqVVmpy93ZaL0X9XfmwoooqjIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAntJESUpIcRSrsc+gPQ/gQDjvjFRSRvDK8TjDoxVh6EU2rMv8ApFukw5kjUJKPYYCt9MYX8BnrUPR37nRH36bj1jqvTqvlv95WoooqznCrOpf8hS7/AOuz/wDoRqtVnUv+Qpd/9dn/APQjUfa+X6nQv4D/AMS/JlaiiirOcKszfuLWO3/ifEsn5fKPyJP/AALHam2saNJ5kozDHy/bd6L9TjH5ntUUkjzSvK5y7sWY+pNQ9XbsdEfcpuXWWi9Or+e33jaKKKs5wooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigByxyNG7qjFExuYDhc9M+lNp0ckkMgeJ2Rx0ZTgip/Ogn/wCPiLy2/wCekKgfmnAP4Y9ealto2jCEla9n57ff0+f3laip5LSRIzIhWWIdZIzkD6jqPxAz2qCmmnsROnKDtJWCiiimQFFFFABU9pIiSlJDiKVdjn0B6H8CAcd8YqCik1dWLpzcJKS6DpI3hleJxh0Yqw9CKbVmb9/ax3H8SYik/L5T+QI/4DnvValF3WpVWChL3dnqvR/1Z+aCrOpf8hS7/wCuz/8AoRqtVnUv+Qpd/wDXZ/8A0I0vtfL9S1/Af+JfkytRRU9pGjyl5BmKJd7j1A6D8SQM9s5qm7K5lTg5yUV1HTfuLWO3/ifEsn5fKPyJP/AsdqrU6SR5pXlc5d2LMfUmm0oqy1KqzU5e7stF6L+rvzYUUUVRkFFFFABRRU0VtJKpkwEiBwZHOFHtnufYZPtSbS3KhCU3aKuQ07y5PK83Y3l7tu/HGfTPrU++2t/9WvnyD+NxhAfZe/1P4rUUs0k7BpXLEDAz0A9AOw9hSTbNJQhBau78tvm/8vvI6KKKoxCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAHRySQyB4nZHHRlOCKn86Cf/j4i8tv+ekKgfmnAP4Y9earUVLinqawqyguXddnqv681Zk8lpIkZkQrLEOskZyB9R1H4gZ7VBTo5JIZA8TsjjoynBFT+bDccTRrHIeksYwP+BKOMfTHrzSu1vqXy05/C+V9nt8n0+f3laip5LSRIzIhWWIdZIzkD6jqPxAz2qCqTT2Mp05QdpKwUUUUyCe0kRJSkhxFKuxz6A9D+BAOO+MVFJG8MrxOMOjFWHoRTasy/v7RJzzIjCJz7YGz8cBhx/dH4w9HfudEffpuPWOq9Ov8An95WqzqX/IUu/wDrs/8A6EarVZ1L/kKXf/XZ/wD0I0fa+X6gv4D/AMS/JlarM37i1jt/4nxLJ+Xyj8iT/wACx2ptrGjyO8gzHGhdv5AeuCxUcevbrUUkjzSvK5y7sWY+pND1duwR9ym5dZaL06/ft942iiirOcKKKmitpJVMmAkQODI5wo9s9z7DJ9qTaW5UISm7RVyGporaSVTJgJEDgyOcKPbPc+wyfan7re24QLcS/wB852D6KQCT9eOowetRSzSTsGlcsQMDPQD0A7D2FTdvY25KcPjd32X6v/K/qS77a3/1a+fIP43GEB9l7/U/itRSzSTsGlcsQMDPQD0A7D2FR0U1FLUidaUlyrRdlt/wfnf5BRRRVGQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA6OSSGQPE7I46MpwRU/nQT/wDHxF5bf89IVA/NOAfwx681WoqXFPU1hVlBcu67PVf15qzJ5LSRIzIhWWIdZIzkD6jqPxAz2qCnRySQyB4nZHHRlOCKn823n5njZJD/AMtIQoH/AHxwM9uCP8VdrfUvlpz+F8r7Pb7/APP7ytU9pIiSlJDiKVdjn0B6H8CAcd8YoktJEjMiFZYh1kjOQPqOo/EDPaoKekkSlOjNNrX8/wDNPVaMdJG8MrxOMOjFWHoRU+pf8hS7/wCuz/8AoRom/f2sdx/EmIpPy+U/kCP+A571YnjR9ZvHkGYopXdx6gNwPxJAz2zmo5tbvt+p1OjeHLHZyVvTle/prf0ZXm/cWsdv/E+JZPy+UfkSf+BY7VWp0kjzSvK5y7sWY+pNSRW0kqmTASIHBkc4Ue2e59hk+1UvdWpzTvVnamtFt6L+rv13IamitpJVMmAkQODI5wo9s9z7DJ9qfutYPuBppR0dsBAf93GSO/OPcdjFLNJOwaVyxAwM9APQDsPYUXb2HyU4fG7vsv1f+V/Ul321v/q18+QfxuMID7L3+p/FailmknYNK5YgYGegHoB2HsKjopqKWpE60pLlWi7Lb/g/O/yCiiiqMgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACipYbme33eTNJFu67GK5/KpP7Svv+f24/wC/rf41L5uhtFUbe83fyS/zK1FWf7Svv+f24/7+t/jR/aV9/wA/tx/39b/Gl73l+JVqHeX3L/MrUVZ/tK+/5/bj/v63+NH9pX3/AD+3H/f1v8aPe8vxC1DvL7l/mVqKs/2lff8AP7cf9/W/xo/tK+/5/bj/AL+t/jR73l+IWod5fcv8ytRVn+0r7/n9uP8Av63+NH9pX3/P7cf9/W/xo97y/ELUO8vuX+ZBHJJDIHidkcdGU4IqfzoJ/wDj4i8tv+ekKgfmnAP4Y9eaP7Svv+f24/7+t/jViOfUnjEj300UR6SSSsAfoOp/AHHeplfd2/E6KLg/djzNdrRt676et16jIIDCWJdZLWRdkkseSFBIwSOowwBwQM49Kt6nbSCe4jACI07SSyOcKOTtGe5Cndgcnd04ottSlE2I7m6ZEG6SaVzwo64XJUE9BnOSR0qxqWpStNITJMiLK0RMMhUoQTjjoQRzzgkg8gCuZup7RaHswhhPqkvee/l21Sfba7tprru1j77a3/1a+fIP43GEB9l7/U/itRSzSTsGlcsQMDPQD0A7D2FXmn1AqZIL+eaMDJ2ytuUf7S5yPc8j3qt/aV9/z+3H/f1v8a6I330/E8es4Jcr5kuyUbP8dfW7+RWoqz/aV9/z+3H/AH9b/Gj+0r7/AJ/bj/v63+NX73l+JzWod5fcv8ytRVn+0r7/AJ/bj/v63+NH9pX3/P7cf9/W/wAaPe8vxC1DvL7l/mVqKs/2lff8/tx/39b/ABo/tK+/5/bj/v63+NHveX4hah3l9y/zK1FWf7Svv+f24/7+t/jR/aV9/wA/tx/39b/Gj3vL8QtQ7y+5f5lairP9pX3/AD+3H/f1v8aZLd3M6hZriWRQcgO5Iz+NNc3UmSo291u/ov8AMhoooqjEKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqeO0keMSOViiPSSQ4B+g6n8Acd6TaW5cKcpu0VcgqeO1d4xI7xxRn+KRsfiFHzEZ4yB/I07zoIP+PeLzG/56TKD+Scgfjn14qCSSSaQvK7O56sxyTU3b20NeWnD4nzPstvv6/L7yfzoIP8Aj3i8xv8AnpMoP5JyB+OfXioJJJJpC8rs7nqzHJNNqa2iWWb94SIlG6Qjso649z0HuRRZR1FzzqtU1ou2y/rzd+o9/wDR7NY+kk2Hf1C/wj8euP8AdNWZ2U6tewSMBHNM65J4Vtx2t7c9T6E1RmlaeZpWABY9B0A7Aew6CpdS/wCQpd/9dn/9CNRy669v1Op1koXjspJLzXK/z1v6+RB+8hl/iSRG+hUj+Rqf7THNxdR7m/56pw/49m9eeT60XP76JLofePyS/wC8O/4jnJ6kNVarSUld7nPKUqMnGLvF667NdNP666lhrQlTJBIkqAZ4OHH1U88DrjI9+Kr0qsyMGVirKcgg4INWPtMc3F1Hub/nqnD/AI9m9eeT60e8vMVqVTb3X+H37r53XmVqKsNaMVMkDCaMDJ2/eUf7S9R7nke9V6pNPYynTlD4l/Xk+oUUUUyAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqeO0keMSOViiPSSQ4B+g6n8Acd6TaW5cKcpu0VcgqeO1doxLIfKhP8bfxf7o/iP0/HFO86CD/j3i8xv+ekyg/knIH459eKgkkkmkLyuzuerMck1N29tDXlpw+J8z7Lb5vr8vvJ/Ogg/wCPeLzG/wCekyg/knIH459eKgkkkmkLyuzuerMck02imopakTqymuXZdlov683dhRRRVGQVZb9xZBOkszbnHcIANv4EknHsp9Mstollm/eEiJRukI7KOuPc9B7kU2aVp5mlYAFj0HQDsB7DoKh6ux0Q9ym59Xov1f6fNkdWdS/5Cl3/ANdn/wDQjVarOpf8hS7/AOuz/wDoRo+18v1BfwH/AIl+TEtGUmSCRgElUjk4ww5U+g54z6E9KgZWRirKVZTggjBBpKs3P76JLofePyS/7w7/AIjnJ6kNRtL1BfvKVusfy6/c9fRsrUUUVZziqzIwZWKspyCDgg1Y+0xzcXUe5v8AnqnD/j2b155PrVaipcUzSFWUNFt26fd/wz8yw1qWUyWzGaMDJ4w646krk4Hv05HOeKr0qsyMGVirKcgg4INWPtMc3F1Hub/nqnD/AI9m9eeT60veXmaWp1Nvdf4f5r53XmVqKsNaMVMkDCaMDJ2/eUf7S9R7nke9V6pNPYynTlD4l/Xk+oUUUUyAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqeO0keMSOViiPSSQ4B+g6n8Acd6bDN5O4iKNmPRnXdt/A8H8QaZJJJNIXldnc9WY5JqXzPY2j7OKvLV9tl83/l95P50EH/HvF5jf89JlB/JOQPxz68VBJJJNIXldnc9WY5JptFCilqKdWU1y7LstF/Xm7sKKKKoyCiiigAooqa2iWWb94SIlG6Qjso649z0HuRSbsrlQg5yUV1Hv/o9msfSSbDv6hf4R+PXH+6arVJNK08zSsACx6DoB2A9h0FR0oqy1LrTUpWjstF6f8Hf5+QVZ1L/kKXf/AF2f/wBCNVqs6l/yFLv/AK7P/wChGl9r5fqWv4D/AMS/JlarFoylmgkYCOYbck8K38Le3PU+hNV6Kpq6sZU58klL+vNfMVlZGKspVlOCCMEGkqzc/vokuh94/JL/ALw7/iOcnqQ1VqUXdDqw5JWW3T06f13TCiiiqMwooooAVWZGDKxVlOQQcEGrH2mObi6j3N/z1Th/x7N688n1qtRUuKZpCrKGi27dPu/4Z+ZYa0YqZIGE0YGTt+8o/wBpeo9zyPeq9KrMjBlYqynIIOCDUstw06jzEQyZ5kxhj9ccH1yRn3oXMipeykrrR9t18uq+d15kNFFFUYhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABVlv8ARrQIP9bOuX9kyCo9iSM/TbjqaZbRLLN+8JESjdIR2Udce56D3Ips0rTzNKwALHoOgHYD2HQVD1djoh7lNz6vRfq/0+bI6KKKs5wqzqX/ACFLv/rs/wD6EarVZ1L/AJCl3/12f/0I1H2vl+p0L+A/8S/JlaiiirOcsWrKxNtIwWOUj5icbWGdpJ9OefYnvioGVkYqylWU4IIwQaSrNz++iS6H3j8kv+8O/wCI5yepDVG0vU6F+8p26x/L/gPX0bK1FFFWc4UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVNbRLLN+8JESjdIR2Udce56D3IpN2VyoQc5KK6j3/wBHs1j6STYd/UL/AAj8euP901WqSaVp5mlYAFj0HQDsB7DoKjpRVlqXWmpStHZaL0/4O/z8goooqjIKs6l/yFLv/rs//oRqtVnUv+Qpd/8AXZ//AEI1H2vl+p0L+A/8S/JlaiiirOcKsWjKWaCRgI5htyTwrfwt7c9T6E1XopNXVi6c+SSl/XmvmKysjFWUqynBBGCDSVZuf30SXQ+8fkl/3h3/ABHOT1Iaq1KLuh1YckrLbp6dP67phRRRVGYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABVl/wDR7NY+kk2Hf1C/wj8euP8AdNQR+X5qebu8vcN23rjvj3p00rTzNKwALHoOgHYD2HQVLV2bQkoQb6vT5dX+n3kdFFFUYhRRRQAVZ1L/AJCl3/12f/0I1Wqa7lWe8nmUELJIzAHrgnNTb3rmykvYuPW6/JkNFFFUYhRRRQBYtGUs0EjARzDbknhW/hb256n0JqBlZGKspVlOCCMEGkqa4lWdkkwfMKjzCe7DjP4jBPuTU2tI25lKlZ7rb0fT5PX0bIaKKKoxCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9k=",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAIAAAAP3aGbAAASRklEQVR4Ae3Z7bqjNrIG0Eyeuf9bnlGiNHF7G8yHVCrEmh8nNgiptArw2/v88Yf/ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBwXeB/16doPUPCksoWc1bV2n7m+f6ceXP2RoAAAQIJBbJlh2z1lJYlLCnhjZS8JAkreYOUR4AAgRkFUiWIVMWUbmerZ8YbMGJPElaEsjUIECBA4F0gT47IU0kxSlXMe898PyIgYR3RMpYAAQIEGgokSRNJyiiweSpp2OXHTiVhPbb1Nk6AAIEEAhkyRYYaSiuSlJHgppikBAlrkkbaBgECBO4qMDxZDC+gdC5DDXe9gbLWLWFl7Yy6CBAg8ByBsfli7Oqly8MLeM6dFrlTCStS21oECBAgsCIwMGUMXLpgjF19pRsONxCQsBogmoIAAQIEGgiMyhqj1i1kA5du0DBTbApIWJs8ThIgQIBApMCQxDFk0aI6at3Ihj55LQnryd23dwIECOQTiM8d8SsW9SGL5uv2zBVJWDN3194IECBwS4Hg9BG8XGlJ/Iq3vA9uXrSEdfMGKp8AAQJTCkRmkMi1SrOCl5vy9rjFpiSsW7RJkQQIEHieQFgSCVuo9DByrefdMrl2LGHl6odqCBAgQOBfgZg8ErNK2VXYQv8K+jROQMIaZ29lAgQIEPgqEJBKApYo24xZ5aunAWECElYYtYUIECBA4JRA72zSe/6y6YAlTtG6qKOAhNUR19QECBAg0Eaga0LpOnnZf+/52xCbpbWAhNVa1HwECBAg0EOgX07pN3Nx6Dp5D2dzthKQsFpJmocAAQIEOgt0Siudpi0Y/WbuLG36BgISVgNEUxAgQIBAkECPzNJjzsLRadogaMsQINBEoPmLoPmEZZs95myiZ5IwAf8kDKO2EAECVwW8sK4Kup4AAQIEogXa/oOr7WzFovmE0b7WayEgYbVQNAcBAgQIBAs0TDENpyoIbWcLVrVcQwEJqyGmqQgQIEAgUKBVlmk1T9l6w6kCIS3VRUDCOsBanhwPzwEvQ3cIuKl2IBlyQWD6O6zJS7nJJKVLrea50PBel05/I/WA+2+PSeee8z9/b68+SPXz3Pu1u+YCbp7mpCbcJTDrj2R9onYRrAy6PkOZuMkkKwWOOTzrDROmKWFdopa2LvE96eL68hXJn9Tz3Hud7MfzYrq5eHlp9fUZktwvk90YY1UlrGb+0lYzylkmqu9cqWqWfs67jzl+VK9knCvXlvvi4uXD76w5boDhjD8LkLB+mjQ4Im01QLznFPVVK1Xds3uq/jss3DcvnK789IXllrly7cA7rpR908oHoh1dWsI6KnZ4vLR1mOxuF9T3lFR1t76p95vAHX+Ez6WGc1cVv9MXfrPvcv6ODe0CETWphBUl/fc60lYod8/F6otVquppbO5MAjf6cT6Rek5cUppz7qrgrt6occEyActJWAHIn5eQtj67JD5a36dSVeIWKS1EIP+P9tHsc3R8YT5xSUhz/lokf4PCKMYuJGGN9f9ndWkrRRs+FVFfo1LVJxvHCCT+MT+UgA4NLm0/Oj7gTiklJawqYOOZl5Cw0nVH2hrekvqekqqGN0IBNxPI9iO/P3HsH1lacmhw1xZmA++6WZMT6CKQ6ina+XLZOax47R/ZBffXpKmQfxXlvwRuK5Dnwd5DuL/a/SP3rHtuTIYazlX+tKv8Des2HS9/UlmeK39eadI2nk0YTULgi0B50paH7cvQDqf3LL1nTClt57Dmmyjrjlq6+V4eNaGEdct2+/8knm5bfU+JqKcBXUjgksCQsPA1nnwdUPa8Z8wlmt8vHgL1ewm+XRWQsK4KDr9e2vragvpmlKq+QhlAIFQgMkRs56PtswXl64AmcJEgTQo2ybaAhLXtc7Oz0tbSsPpClKoWEB8IpBYICBcbKWnjVFHbPnuRNWDjFyt0+WkBCes0XfYLH5i26ntQqsp+a6qPwLZAv9CxlpXWjpc6N05t72LjbL8NbizqVLyAhBVvPmDFidNWff1JVQPuKksSCBBoHkY+JqaPB8vu1o6f2HjzjZyowSXBAhJWMPj45SZIW/WtJ1WNv5lUQCBSoFXe+TnPzyNlXx8PHt1vk0mOLmp8EgEJK0kjxpRRQsry/CcPLHepc0wjrUrgaQLljbC8FE7s/e3at69lwp9Hdq5SLjx97c4lDLuLgIR1l051rzPh37bqeyp59OveGAsQILAtcC7UvOag189lrbev26vX8Ucv+TqnARMISFgTNLH9FgamrfqekqraN9WMBJ4gUN4g+8POMnL5UIheP2+IlWE7R25M4tTcAhLW3P1tsLuAtFXfU1JVg26ZggCBRWBPCKpvnyUrLR+WSV4/7JnwdbzPDxeQsB5+AxzbfsO0VV9kUtWxBhhNgMA5gY1wtJyqb6W3+Zezb8d9JfBVQML6SmTAZ4ETaau+v6Sqz6COEiAQI/AzNL0defsaU5VV5hOQsObr6YAdbaQtqWpAP+ZdUjw/0Nv67B24wFAC+wQ8h/uc/gC1E8qwvQJvr3V32F444wgQiBR4/UPV8nn5EFmJtQgQILAq8PZWWr6WD/V/y5FfB/yXwBkBf3Q/o+aaRaC+kr7+u68O2Dl4mdwHAgQItBFYC031rVT/b1lp+bCsunbhMsAHAmsCEtaajOOrAvUd9DVVrV0vba3JOE6AQEuBr+FoyVPLh7L86+e3ar5O+Dbe14cLSFgPvwH2br++dE6nqrVlpK01GccJEDgjsD8EvSap189l1bevH+vYv9DHyx18goCE9YQun9xjfcs0T1Vr1UhbazKOEyCwJXAi7LxlqLevZbGfRzYqOFHAxmxOTSMgYU3TyjYbqa+VsFS1VrS0tSbjOAECfwlcCTU/09PPI3WJE9ZXCjuxnEsyC0hYmbsTUdvyZhmeqtZ2+5q2ypi0da7V7zgBAm0ElrfVlek+TvLxYFll7fj+Aq7PsH8tI7MJSFjZOhJUT33s75hWSs33LT6ou5YhMI1AedobhpS1qdaOF8aNU4eQyzytpjq0rsEDBSSsgfjRS9fH+46p6qNU3chkm/q4UwcJPEugUxjZCDgbpwr99tkTvem0wROVuKSrgITVlXf85PXVME2qWgOVttZkHCdwD4HeoWM7JW2fLYJfB5xW7r3x04W58LqAhHXdMN0M9V0wfapac5e21mQcJ5BLICxcfM1HXwcUuD1jLvqGgVys0+U7BSSsnVDZh9WH/7Gpaq090taajOMExgjEh4g9yWjPmOK1c1gT2XioJmWb5FVAwnrVuNnn+rRLVTvbJm3thDKMQGOBgWFhZybaOay47B/ZEHEgYMNdPHAqCetOTV+ebanqYtte01aZiudFT5cTeBdY3lbvJ2K/7yxj57BS+/6R/TaaoYZ+uzMzgVCB8jgleaL2l7F/ZKE8NLgTfakhQxmddmdaAhECqZ6iQ8/zocGF8uj4TvqpwDvt8dbT+htW0vbVB9jfVoLb8/q3LfjB+Ja7pUDOH/mjCejo+NKqE5d0bXDORnTdcv7JJaxEPapPrB/2JC2RtpI0QhnpBJL/mJ/IPicuKV05d1VAO5M3KEAgyRIS1uBG1EdUqhrchm/LS1vfhJyfXeAuP9rnUs+5q0rPT18Ydr/cpXFhIJELSViR2v+sVZ9JqWoAfYslpa0Wiua4g8DtfpxP553TF5Y2Xrk2+C64XUODfZovJ2E1J/08YX0IparPOrc9Km3dtnUKXxG474/wlaRz5doCefHylVb0PXzfRvd1aTq7hNWU8/fJ6lMnVf2uMu03aWva1k6/sQl+bC9mnIuXlzvk+gwDb7MJboCBehtLS1gbOGdO1cdMqjpjN9E10tZEzZx0KzP9qF5PN9dnKLdJk0mG324z3RjDMSWsBi2oz5VU1YByximkrRm7es89Tfnj2STXNJmk3BSt5klyf015w0TaSlgnteuDJFWd5HvqZdLWUzs/bt9z/0i2SjSt5il9bjjVuLvmw8pz30gfNtzikIR1QLE+OVLVATJD1wWkrXUbZwjsEGiYZRpOVQpvO9sOCUOSCvyZtC5lESBAgACBNYG2KabtbKXm5hOuOTieWUDCytwdtREgQIDAD4Hm+aX5hKXkHnP+kHAgtYCElbo9iiNA4FXAC+tVw2cCBAgQyC3Q459aPeYsip2mzd0f1REg8Eug0yug07Sl6n4z/yLx37wC/kmYtzcqI0CAAIF/BfqllX4zl+q7Tv6vjk/5BCSsfD1REQECBAi8CXTNKV0nLxvpPf+bla9JBCSsJI1QBgECBAisCPROKL3nL9sKWGIFz+FhAhLWMHoLEyBAgMB3gYBsErBE2WfMKt9BjYgSkLCipK1DgAABAkcFYlJJzCpl72ELHXU2voeAhNVD1ZwECBAgcFkgLI+ELVRIIte63AETXBKQsC7xuZgAAQIEughEJpHItQpW8HJd2mPSHQIS1g4kQwgQIEAgUiA4gwQvVyTjV4xsn7WqgITlTiBAgACBTALx6SN+xeI9ZNFMfZ6/Fglr/h7bIQECBG4jMCR3DFm0tGTUure5G25eqIR18wYqnwABAtMIjEoco9YtjRu49DS3TdqNSFhpW6MwAgQIPElgYNYYuHTp8NjVn3SLRe9VwooWtx4BAgQIvAuMTRljVy8Wwwt474fvLQQkrBaK5iBAgACB0wLD88XwAgpdhhpOd9CFHwUkrI8sDhIgQIBAiECGZJGhhoKdpIyQtj9iEQnrEW22SQIECGQUSJIpkpRROpSnkoy3y91qkrDu1jH1EiBAYA6BPGkiTyWls6mKmeNOG7ULCWuUvHUJECDwYIFUOSJVMeWmyFbPg+/TS1uXsC7xuZgAAQIEDgtkSxDZ6imgCUs63ObHXyBhPf4WAECAAIFIgYTZIWFJpSM5q4q8Ve6+loR19w6qnwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJhB4P+8eVV1E/+aiQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<PIL.Image.Image image mode=RGB size=400x400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from PIL import Image\n",
    "im = np.zeros( (400,400,3),dtype=np.uint8)\n",
    "\n",
    "def line1(x1,y1,x2,y2,color):\n",
    "    if y1==y2 :\n",
    "        if x1<x2:\n",
    "            im[x1:x2+1,y1]=color\n",
    "        else:\n",
    "            im[x2:x1+1,y1]=color\n",
    "    elif x1==x2 :\n",
    "        if y1<y2:\n",
    "            im[x1,y1:y2+1]=color\n",
    "        else:\n",
    "            im[x1,y2:y1+1]=color\n",
    "    else:\n",
    "        if abs(x1-x2)>=abs(y1-y2):\n",
    "            if x1<x2:\n",
    "                for x in range(x1, x2+1):\n",
    "                    y = int((x-x1)/(x2-x1)*(y2-y1)+0.5) + y1\n",
    "                    dot(x,y,color)\n",
    "            else:\n",
    "                for x in range(x2, x1+1):\n",
    "                    y = int((x-x1)/(x2-x1)*(y2-y1)+0.5) + y1\n",
    "                    dot(x,y,color)\n",
    "            \n",
    "        else:\n",
    "            if y1<y2:\n",
    "                    for y in range(y1, y2+1):\n",
    "                        x = int((y-y1)/(y2-y1)*(x2-x1)+0.5) + x1\n",
    "                        im[x,y]=color\n",
    "            else:\n",
    "                    for y in range(y2, y1+1): \n",
    "                        x = int((y-y1)/(y2-y1)*(x2-x1)+0.5) + x1\n",
    "                        im[x,y]=color\n",
    "\n",
    "line1(200,200,150,300,(255,0,0))\n",
    "line1(200,200,100,250,(255,0,0))            \n",
    "line1(200,200,100,150,(255,0,0))\n",
    "line1(200,200,150,100,(255,0,0))\n",
    "line1(200,200,250,100,(255,0,0))\n",
    "line1(200,200,300,150,(255,0,0))\n",
    "line1(200,200,300,250,(255,0,0))\n",
    "line1(200,200,250,300,(255,0,0))\n",
    "line1(100,200,300,200,(255,0,0))\n",
    "line1(100,200,300,200,(255,0,0))\n",
    "line1(200,100,200,300,(255,0,0))\n",
    "im = Image.fromarray(im)\n",
    "display(im)\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "id": "8446db49-03c0-4ee5-8934-79f6624f8626",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQgJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCADIAMgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5/ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqW5h+z3U0O7d5blM4xnBxUVT3siTX9xKhyjysyn1BJqdeY1Sj7JvrdfdZ/qQUUUVRkFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//2Q==",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAIAAAAiOjnJAAACTElEQVR4Ae3SsQ0AIRADQfT99/zEdGCthozsPPY5HgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPAI/M/Ppybw1QLJsyFgWBs95K4wrFylG4EMa6OH3BWGlat0I5BhbfSQu8KwcpVuBDKsjR5yVxhWrlKBCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsCJwAUf4ARIfcOh/AAAAAElFTkSuQmCC",
      "text/plain": [
       "<PIL.Image.Image image mode=RGB size=200x200>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "##试验板块\n",
    "\n",
    "import numpy as np\n",
    "from PIL import Image\n",
    "im = np.zeros( (200,200,3),dtype=np.uint8)\n",
    "\n",
    "im[20:30,40]=(255,0,0)\n",
    "\n",
    "\n",
    "\n",
    "im = Image.fromarray(im)\n",
    "display(im)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73cd5cef-db4d-469e-b6c0-112aebb63eaa",
   "metadata": {},
   "source": [
    "## 作业二\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "id": "52e2415b-547a-478a-8b9b-903a0e49591c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQgJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGQAZADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5/ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqWOAuA7OscZbbvfOM4z2yT+A7j1pN2KjFydkRUqqznCqScE4A7Dk1KskUWCqF5Ac5fG3p/d74Pvg45FNaaRo/LLny8g7BwuQMZx0zjvSuyuWC3f3f5/8ADjvsswwGUISSMSMFPBx39/5H0OARRbvmuU255KqxOOegIHoPTqPfENFFn3HzQW0fvf8AlYlCwYOZJM7eB5Y64HHXpnPPsPXhdttx+9l6nP7odM8fxemT9ePeoaKLeYvaL+Vfj/mSmOPAKzr93OGUg5wcjp6j9R74U2z5bYUkCgnKMDkDBzjr0Oenr6HENFFn3Dmg94/j/wAOOeOSI4kRkPPDDHfH8wR+FNqSOaSIEI5CsQWXqrY5GR0P404SROAJUKthVDx4HA6kr3OPcdOaLtD5YS2dvX/Nf5ENFSmA+WXR1kUKC23Py59c/wAxxyOeaipp3IlFx3CiiimSFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABTkjeQ4UZxjJPAHOMk9hkjmnRxNIrvkKiDlj0z2H1P+eAaWWbf8qLsi4wgPpnBPqeTz78YHFTfojRRSXNP/AIf/AIH9IVmjjXbHh3yd0hHGORwD+eTz06Y5jkkeWQu5yx/D8PYe1NoppWFKo5K2y7BRRRTICiiigAooooAKKKKACiiigBVZ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z16dySfxolvZXh8hMRQZz5UeQpPHXuencmq9CTbuwnOnGn7Onrfd/kku3XXVvtYKKKKs5gooooAKKKKACiiigAqUkC1UALkucnAzwBjvnHJ7D8ccRVNMSIoY9wIVckA5AJOew64x6/pgS+hpDRSfl+bIaKKKozCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAdG5ilSQdVYMOSOn05p00YimZASyg/KxXbuXscH1GDUdTSAPAkoADKdjBUwOnyknpk8/985qXozWPvQa7a/o/wBCGiiiqMgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAVVZ2CqpZmOAAMkmpLhg07bX3quFVufmAGAeenA6UsACh5iAfLA2hk3KWPQHt0yeeDtqGp3Zq/dp27/kv+DcKKKKoyCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKlgKZZHKqrrt3sudvIOf0x9CeDUVFJq5UZcruKysjFWUqynBBGCDSVNLiSNZQ4JACMpPIwMDqeRgfh0wOMw0J3Q5x5ZabBRRRTICiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKmt8I3nFwvlkMBnlm7AYIPbr2+uAU3ZFQjzSSCYCNVhwN6klzswQxx8pz6Y/Mn61DRRQlYJy5ncKKKKZIUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBJFKYmPUow2uo/iX05B/+scGiWIxMOpRhuRj/EvrwT/9Y5FR1LE6fcm3GLnoeUJx8wHTPA+vt1EvTVGsWpLkl8vL/gfrr3IqKdIhjkKnnHQ4IyOx57Ec02qM2mnZhRRRQIKKKKACiiigAooooAKKKKACiiigAooooAKKKVVZ2CqpZmOAAMkmgaV9ELHG8sgRBlj+H4+w96fNIG2xoW8pPuhsA+5OO5/HsMnFLKyIPLhYkYw75I39D09OOO/f2ENStdTST5FyLfr/AJf5+fkgoooqjIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCVJsRNE670OSBnBVvUf19fwBCSxNCwBIIIyrL0YeoqOpI5WjBXAZGILI3Q4/z1HPJ9am1tUaqSkuWfyf9dPy6diOipmiV13wknk5jPLKOT+IwOvsc44zEysjFWUqynBBGCDTTTJlCUd9vw/r+rCUUUUyAooooAKKKKACiiigAooooAKKKm+zsgczZi2jgMPmY8jAH1Bye2PXAKbSKjCUtkRxxvLIEQZY/h+PsPepGlCRGGPGCfncfx88dRwOhx68nthJJtwKRrsi3bgmc84xknuf8TgDNRUrX3LclDSG/f8Ay/z39EFFFFUZBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVMsythZ0Mig9Q2HxjGM4PHA6g9OMc1DRSauVGbjsTLAJcCKQM5OBGRhjxk47deBzk+lRMrIcMpBwDgjseRSVIs0ix+WHPl5J2HlckYzjpnHelqVeD3VvT+v1I6Km88NgvDExBJ+7tzznHyke4+h9hgBti3KSqpPUOCQOe2Bnt6dD0zwXfYfJF7SXzuv8yGipQsGDmSTO3geWOuBx16Zzz7D14XbbcfvZepz+6HTPH8Xpk/Xj3ouL2b7r70Q0VKTAAAFkY7eTuA5we2DxnHfsfXhTMgLeXAigggFssQOB9M8HnHc9OMF/IORLeS/FkSqzsFVSzMcAAZJNSiAKAZpBHkKwXGWKnuB06c8kZGPWka4lZWXdtV/vKgChuSeQOvJqKjVjvTjtr+C/z/ABJhMsYHkoUfC5ctlgRzleBjt78detQ0UU0rESm5bhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//2Q==",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAIAAAAP3aGbAAAOOElEQVR4Ae3d2brbthUGUDvv/84JbcUyj45IkZiBvXrRaiCm9W8Aij+3/fHDvwgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQmFfg399Tf/n387dbi8cD867azAkQGF3g5Rjapptz7pTtbXQ78yNAoLbA9zNlvRFrr0j/BAjUEmh/Qp2vZLT5nM/WtwQItBDYzoXH0dBisLwxJppq3kK1JkBgJ7D/8bL7eJqXs89/GmgTJdBdYJbfU1egVlrLlfV6hkAUgW1vr7q9F15alOq0TgJPgVXPqecCny/irPS5ZC8ILCIQ9ndH2IUvUriWEU3AD41H4hyiVb71zidgl+4zo7HX8JrAQAI251EYZI5kfE6gtcBjN9qT5+6Uzn18S6C6gEMqjZhbmptWBNIF7Lp0u3X/SlqOibYEagk4rfJlGeYb6oHABwHb7APQza953gTzOIHLAnbXZaobD1K9geVRAlcEbKorSjnPEM7R05bA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l+YXDm8IECBAgEBnATdz5wCyh5dgNqEOphJQ8VPF9WWysvvC4U0QAXU/Y9BSmzE1cy4joPrLOLbqRV6tpI1DgAABAgQyBVzamYDNmkuqGbWBRhewGUZOSDojp2NufQTsij7un0aVyych30cVsDdGS14ioyViPmMJ2CHj5CGLcbIwEwIECBAgUELA3V5CMb0P/ul2WsYUsGd65U6+l7xx5xawc9rnx7y9uRGXErCF2sTJuY2zUdYXsJdqZ0y4trD+wwnYVDUip1pDVZ8EfgnYXWXrgGdZT70ReCNgm71BufkRw5tgHieQIWC/ZeD5oZqDpy2BJAFnVhKb0yqNTSsCJQQex5bD69yS0rmPbwm0FnBmHYmTOZLxOYHOAjbnPgAaew2vCYwoYJc+UuEwYnWaE4G3Att2jbljwy78bRn4kMBkAnGOrTgrnawETZfAXYGFf3csvLS7KXuewGoCK/0MWWktq9WZ9RAoJfDY5/Pu9tnnXypH/RAIJ7Bt/llOrommGq6MLJhAY4H9z5YRjrDR5tM4DsMRIHBDoP150X7EGxweJUBgIoHvp8njk7QllO0tbQ5aESAQS+DtufPy4cvbDejxSSwpqyVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAp8E/gOwiLx6v2JHlgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<PIL.Image.Image image mode=RGB size=400x400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import math\n",
    "import numpy as np\n",
    "from PIL import Image\n",
    "im = np.zeros( (400,400,3),dtype=np.uint8)\n",
    "\n",
    "def circle(x,y,r,color):\n",
    "    for i in range(360):\n",
    "        im[int(x-r*math.sin(i/180*math.pi)+0.5),int(y-r*math.cos(i/180*math.pi)+0.5)]=color\n",
    "    \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "circle(200,200,100,(255,0,0))\n",
    "circle(200,200,20,(255,0,0))\n",
    "im = Image.fromarray(im)\n",
    "display(im)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "94810be7-76f5-4dfa-90c2-c354056112ec",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "9513bb33-2fae-4169-b6d7-92eaae4a9c13",
   "metadata": {},
   "outputs": [],
   "source": [
    "#补充\n",
    "from PIL import Image\n",
    "import numpy as np\n",
    "\n",
    "# 创建一个随机的NumPy数组，这里以灰度图像为例\n",
    "data = np.random.rand(100, 100)\n",
    "\n",
    "# 将NumPy数组转换为图像对象\n",
    "im = Image.fromarray(data, 'L')  # 'L' 表示灰度模式\n",
    "\n",
    "# 显示图像\n",
    "im.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "dd59228d-6140-48e0-b346-a694139dd452",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
